home *** CD-ROM | disk | FTP | other *** search
/ PC Electronics Plus 3 / PC Electronics Plus 3.iso / subdwg / lsp / mbloque.lsp < prev    next >
Lisp/Scheme  |  1994-11-14  |  3KB  |  85 lines

  1. ;***********************************************************************
  2. ;* Comando : Mbloques
  3. ;* Se usa para generar la lista de bloques que existen en el dibujo
  4. ;* actual y que el usuario pueda buscar e insertar facilmente el bloque
  5. ;* en que desea de acuerdo al prefijo.
  6. ;* Lee la tabla de definicion de bloques y extrae todos los nombres de
  7. ;* bloques que empiecen con prefijo
  8. ;************************************************************************
  9.  
  10. ; Change log
  11. ;
  12. ; 8/11/94  C.Perigault  Agrege el sinonimo maneja-bloques
  13. ;
  14. ;
  15. (defun c:maneja-bloques () (c:Mbloques))
  16. (defun c:Mbloques ( / ListaEquipos EquipoNumero continuar bloque
  17.               NombreBloque numero prefijo opcion)
  18.  
  19.  
  20.   ;**********************************************************************
  21.   ;* Funcion : (printMenu lista)
  22.   ;* Comentarios : Esta funcion se utiliza para imprimir menus de seleccion
  23.   ;* en la pantalla de texto del acad para que el usuario seleccione
  24.   ;* una alternativa. La lista debe ser de la forma  (clave descripcion)
  25.   ;* donde la clave es un numero u otro objeto y descripcion un texto
  26.   ;* (generalmente)
  27.   ;************************************************************************
  28.   (defun printMenu (lista / listaTemp numeroDeFilas numero opcion)
  29.     (textscr)
  30.     (setq opcion nil)
  31.     (setq listaTemp lista)
  32.     (while listaTemp
  33.       (setq numeroDeFilas 0)
  34.       ; mientras tengamos elementos en la listaTemp o el numero de filas
  35.       ; sea menor que 20 imprimimos el menu en la pantalla
  36.       (while (and (< numeroDeFilas 20) listaTemp)
  37.     (princ "\n[")
  38.     (setq numero (car (car listaTemp)))
  39.     (if (< numero 10) (princ " "))
  40.     (princ numero)
  41.     (princ "] ")
  42.     (princ (cadr (car listaTemp)))
  43.     (setq numeroDeFilas (+ numeroDeFilas 1))
  44.     (setq listaTemp (cdr listaTemp)))
  45.       (princ "\n")
  46.       (princ "\nIngrese el numero de su opcion o [enter] para continuar: ")
  47.       (setq opcion (getint ))
  48.       (if (assoc opcion lista)
  49.        (setq listaTemp nil)))
  50.     (graphscr)
  51.     opcion)
  52.     ;******************************************************************
  53.   (graphscr)
  54.   (setq prefijo (strcase (getstring "\nPrefijo o <enter> para todos : ") nil))
  55.  
  56.   (textscr)
  57.   ; Inicializacion de variables
  58.   (setq ListaEquipos nil)
  59.   (setq EquipoNumero  1)
  60.   (setq continuar    t  )
  61.   ; Buscamos el primer bloque de la tabla de Bloques
  62.   (setq bloque (tblnext "BLOCK" t))
  63.   ; buscamos en todos los bloques definidos, los que pertenezcan
  64.   ; a la serie prefijo
  65.   (while bloque
  66.     (setq NombreBloque (cdr (assoc 2 bloque)))
  67.     (setq bloque (tblnext "BLOCK"))
  68.     ; Son las primeras letras del nombre del bloque prefijo
  69.       (if (or  (zerop (strlen prefijo))
  70.            (equal (strcase (substr NombreBloque 1
  71.                 (strlen prefijo ) )nil) prefijo))
  72.     ; Si es asi agregamos a la lista de equipos el nombre del bloque
  73.       (progn
  74.     (setq ListaEquipos (append ListaEquipos (list (list  EquipoNumero NombreBloque))))
  75.     (setq  EquipoNumero (+ EquipoNumero 1)))))
  76.     ; si existe el equipo lo insertamos
  77.     (setq opcion (printMenu listaEquipos))
  78.     (graphscr)
  79.     (if opcion
  80.       (progn
  81.     (setvar "TEXTEVAL" 1)
  82.     (command "INSERT" (cadr (assoc opcion ListaEquipos))  pause)
  83.     (setq continuar nil)
  84.     (setvar "TEXTEVAL" 0))))